【awk】合并多个文件的方法

现在有两个没有关联的文件a.list,b.list
$ cat a.list
abc ABC
def DEF
ghi GHI
$ cat b.list
1
2
3
现在希望将a.list 、b.list两个文合并如下:
abc ABC 1
def DEF 2
ghi GHI 3


命令:awk 'NR==FNR{a[NR]=$0;nr=NR;}NR>FNR{print a[NR-nr], $0}' a.list b.list

NR:awk 处理的当前的行数,从1开始,直到所有文件处理完
FNR:awk 处理的当前行在当前文件中所在的行数,从1开始,直到当前这个文件处理完,且在下一个文件会重新计数
NR==FNR:表示当在处理第一个文件时
a[NR]=$0:表示建立一个数组a,每行的行号和改行的内容形成一一对应的关系

nr=NR:这里用nr这个变量记录第一个文件的行数;每处理一行nr被刷新一次,直到第一个文件结尾,最后nr就是第一个文件的行数!
NR>FNR:表示处理第二个文件时
a[NR-nr]:表示第一个文件的内容
$0:表示第二个文件的每行的所有内容

当要这样处理两个以上的文件时,可以递归处理


  • 另附一个文本内容去重awk脚本:
    awk '!a[$0]++' FILE

    !:表示取反
    a[$0]:表示以每行所有内容分别和自然数0,1,2,3…形成二维数组;也可以针对某个块比如$1,$2
    ++:表示对重复的内容进行计数

  • 再附一个按列求和的awk脚本:
    awk 'BEGIN {sum = 0}; {sum += $1};END {print sum}'

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值